package main

import (
	"fmt"
)

//2、make()函数构造切片

// func main(){
// 	s1:=make([]int,5,10)
// 	fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n",s1,len(s1),cap(s1))
// 	//切片遍历
// 	//1、索引遍历
// 	s2:=[]int{3,6,9}
// 	for i:=0;i<len(s2);i++{
// 		fmt.Println(s2[i])
// 	}
// 	//2、for range遍历
// 	for index,value:=range s2{
// 		fmt.Println(index,value)
// 	}

// }
//切片的本质就是对底层数组的封装，包含了三个信息: 底层数组的指针、切片的长度、切片的容量

// 切片不能直接比较，不能使用==操作符来判断两个切片是否包含有全部相等的元素。切片唯一合法的比较操作是和nil比较
// 一个nil值的切片并没有底层数组，一个nil值的切片得长度和容量都是0，但是长度和容量都是0的切片不一定是nil

func main() {
	var s1 []int
	fmt.Printf("s1=%v len(s1)=%d cap(s1)=%d\n,nil=%t\n", s1, len(s1), cap(s1), s1 == nil)
	s2 := []int{} //声明int类型切片并初始化
	fmt.Printf("s2=%v len(s2)=%d cap(s2)=%d\n,nil=%t\n", s2, len(s2), cap(s2), s2 == nil)
	s3 := make([]int, 0)
	fmt.Printf("s3=%v len(s3)=%d cap(s3)=%d\n,nil=%t\n", s3, len(s3), cap(s3), s3 == nil)
	cars := []string{"Ferrari", "Honda", "Ford"}
	fmt.Println("cars:", cars, "has old length", len(cars), "and capacity", cap(cars)) // capacity of cars is 3
	cars = append(cars, "Toyota", "av", "bb")
	fmt.Println("cars:", cars, "has new length", len(cars), "and capacity", cap(cars))

}
